'''
深圳市普中科技有限公司（PRECHIN 普中）
技术支持：www.prechin.net
PRECHIN
 普中

实验名称：外部中断实验
接线说明：按键模块-->ESP32 IO
         (K1-K4)-->(14,27,26,25)
         
         LED模块-->ESP32 IO
         (D1-D4)-->(15,2,0,4)
         
实验现象：程序下载成功后，操作K1键控制D1指示灯亮灭；操作K2键控制D2指示灯亮灭；
         操作K3键控制D3指示灯亮灭；操作K4键控制D4指示灯亮灭；
注意事项：

'''

#导入Pin模块
from machine import Pin
import time

#定义按键控制对象
key1=Pin(14,Pin.IN,Pin.PULL_UP)
key2=Pin(27,Pin.IN,Pin.PULL_UP)
key3=Pin(26,Pin.IN,Pin.PULL_UP)
key4=Pin(25,Pin.IN,Pin.PULL_UP)

#定义LED控制对象
led1=Pin(15,Pin.OUT)
led2=Pin(2,Pin.OUT)
led3=Pin(0,Pin.OUT)
led4=Pin(4,Pin.OUT) 


#定义LED状态
led1_state,led2_state,led3_state,led4_state=0,0,0,0

#KEY1外部中断函数
def key1_irq(key1):
    global led1_state
    time.sleep_ms(10)
    if key1.value()==0:
        led1_state=not led1_state
        led1.value(led1_state)

#KEY2外部中断函数
def key2_irq(key2):
    global led2_state
    time.sleep_ms(10)
    if key2.value()==0:
        led2_state=not led2_state
        led2.value(led2_state)

#KEY3外部中断函数
def key3_irq(key3):
    global led3_state
    time.sleep_ms(10)
    if key3.value()==0:
        led3_state=not led3_state
        led3.value(led3_state)

#KEY4外部中断函数
def key4_irq(key4):
    global led4_state
    time.sleep_ms(10)
    if key4.value()==0:
        led4_state=not led4_state
        led4.value(led4_state)
        
#程序入口
if __name__=="__main__":
    led1.value(led1_state)  #初始化LED，熄灭状态
    led2.value(led2_state)
    led3.value(led3_state)
    led4.value(led4_state)
    
    key1.irq(key1_irq,Pin.IRQ_FALLING)  #配置key1外部中断，下降沿触发
    key2.irq(key2_irq,Pin.IRQ_FALLING)  #配置key2外部中断，下降沿触发
    key3.irq(key3_irq,Pin.IRQ_FALLING)  #配置key3外部中断，下降沿触发
    key4.irq(key4_irq,Pin.IRQ_FALLING)  #配置key4外部中断，下降沿触发
    
    while True:
        pass
